﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using Entities;

namespace BLL
{
    public class UsuarioBusiness
    {

        public Usuario Recuperar(string login)
        {
            Usuario usuario = null;
            try
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    usuario = rep.Single(u => u.login.Equals(login));
                }
            }
            catch
            {
                throw new Exception("Erro ao recuperar usuario");
            }
            return usuario;
        }

        public void AtualizarUsuario(Usuario usuario)
        {
            try
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    if (LoginEmUso(usuario.login))
                    {
                        rep.Commit();
                    }
                    else
                    {
                        throw new Exception("Erro. Login não encontrado.");
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public void CriarUsuario(Usuario usuario)
        {
            try
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    if (!LoginEmUso(usuario.login))
                    {
                        rep.Add(usuario);
                        rep.Commit();
                    }
                    else
                    {
                        throw new Exception("Erro. Login já em uso.");
                    }
                }
            }
            catch(Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public bool LoginEmUso(string login)
        {
            bool existe = true;
            try
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    Usuario user = rep.Single(u => u.login.Equals(login));
                }
            }
            catch
            {
                existe = false;
            }
            return existe;
        }

        public bool LoginCorreto(string login, string senha)
        {
            bool existe = true;
            try
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    Usuario user = rep.Single(u => u.login.Equals(login) && u.senha.Equals(senha));
                }
            }
            catch
            {
                existe = false;
            }
            return existe;
        }

        public void AlterarSenha(string login, string senhaAntiga, string senhaNova)
        {
            if (LoginCorreto(login, senhaAntiga))
            {
                using (var context = new clickdoacoesEntities())
                {
                    Factory<Usuario> rep = new Factory<Usuario>(context);
                    Usuario usuario = rep.Single(u => u.login.Equals(login));
                    usuario.senha = senhaNova;
                    rep.Commit();
                }
            }
            else
            {
                throw new Exception("Senha atual invalida");
            }
        }
    }
}
